/*
 泛型的作用：使用泛型可以减少重复的代码
 封装函数：接收字符串就返回字符串，接收数字就返回数字，接收bool就返回bool
 */
void main() {
  final myDataSource = MyDataSource<int>();
  myDataSource.addData(1);
  myDataSource.addData(2);
  myDataSource.addData(3);
  print(myDataSource.getListCount());
  print(myDataSource.getData(1));
}

//数据接口源(只负责定义，不实现)
abstract interface class IDataSource<T> {
  int getListCount();
  T getData(int index);
}

//数据列表
class MyDataSource<T> implements IDataSource<T> {
  List<T> _dataList = [];
  int getListCount() {
    return _dataList.length;
  }

  T getData(int index) {
    return _dataList[index];
  }

  void addData(T data) {
    _dataList.add(data);
  }
}
